package com.ctshk.rpc.payment.dto.rep.mastercard;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @BelongsProject: ctshk-cloud
 * @BelongsPackage: com.ctshk.rpc.payment.dto.rep.mastercard
 * @Author: hef
 * @CreateTime: 2021-05-07 11:32
 * @Description: 描述
 */
@Data
public class QueryTransactionDTO implements Serializable {
    /**
     * 付款金额
     */
    private BigDecimal amount;
    /**
     * 创建时间
     */
    private LocalDateTime creationTime;
    /**
     * 币种
     */
    private String currency;
    /**
     * 商品描述
     */
    private String description;
    /**
     * 订单id
     */
    private String id;
    /**
     * 商户id
     */
    private String merchant;
    /**
     * 系统生成的高级操作总体结果。
     * FAILURE 该操作被网关，收单方或发行方拒绝或拒绝
     * PENDING 该操作当前正在进行中或尚在处理中
     * SUCCESS 操作已成功处理
     * UNKNOWN 操作结果未知
     */
    private String result;
    /**
     * 该订单在付款过程中的当前进度。
     * AUTHENTICATED T付款人已成功通过身份验证。
     * AUTHENTICATION_INITIATED 付款人身份验证已启动但尚未完成。
     * AUTHENTICATION_NOT_NEEDED 未执行付款人身份验证，因为它不需要。
     * AUTHENTICATION_UNSUCCESSFUL 付款人身份验证无法成功完成。
     * AUTHORIZED 付款已被成功授权，但授权金额尚未（部分，全部或超额）被扣款。
     * CANCELLED 此订单的初始交易已成功作废。
     * CAPTURED 已成功捕获此订单的授权金额（全额或超额）。
     * CHARGEBACK_PROCESSED 已针对此订单处理了拒付。
     * DISPUTED 付款存在争议，正在调查中。信息请求已收到或拒付正在处理中。
     * EXCESSIVELY_REFUNDED 已部分，全部或超额收取了付款，但已成功将所收取的超额金额退还。
     * FAILED 付款未成功。
     * FUNDING 该订单在没有付款人参与的情况下向或从商人转移资金。例如，记录来自支付服务提供商的每月商人服务费用。
     * INITIATED 已成功为此订单启动浏览器付款。尚未付款。
     * PARTIALLY_CAPTURED 此订单的部分授权金额已成功捕获。
     * PARTIALLY_REFUNDED 已捕获部分、全部或超额付款，但已成功退还捕获的部分金额。
     * REFUNDED 已捕获部分、全额或超额付款，但已成功退还捕获的全额金额。
     * REFUND_REQUESTED 本订单已要求退款，但未执行。需要进一步行动来批准退款。
     * VERIFIED 此订单的卡详细信息已成功验证。尚未开始或支付任何款项。
     */
    private String status;
    /**
     * 此订单已成功授权的金额。
     */
    private BigDecimal totalAuthorizedAmount;
    /**
     * 此订单已成功捕获的金额。
     */
    private BigDecimal totalCapturedAmount;
    /**
     * 此订单已成功退款的金额。
     */
    private Integer totalRefundedAmount;
    /**
     * 用户信息
     */
    private Customer customer;
    /**
     * 资金来源
     */
    private SourceOfFunds sourceOfFunds;
    /**
     * 订单信息
     */
    private Order order;
    /**
     * 交易信息
     */
//    private List<TransactionItem> transaction;

    @Data
    public static class Customer {
        /**
         * 用户名字
         */
        private String firstName;
    }

    @Data
    public static class TransactionItem {
        /**
         * 事务被提交到网关的接口
         * AUTO 该事务由网关自动生成。例如，用于自动捕获的捕获事务或用于风险拒绝订单的订单反转事务。
         * BATCH 该交易作为商家批交易的一部分提交。批次可以通过批次上传或通过商户管理。
         * CHECKOUT 该交易是通过checkout integration创建的。
         * MERCHANT_ADMINISTRATION 该交易是在商业管理门户中启动的。
         * SERVICE_PROVIDER_API 该交易是由一个收购者或替代支付提供商报道的。
         * WEB_SERVICES_API 该事务通过Web服务API提交。
         */
        private String gatewayEntryPoint;
        /**
         * 商户id
         */
        private String merchant;
        /**
         * FAILURE 该操作被网关，收单方或发行方拒绝或拒绝
         * PENDING 该操作当前正在进行中或尚在处理中
         * SUCCESS 操作已成功处理
         * UNKNOWN 操作结果未知
         */
        private String result;
        /**
         * 表示网关认为该事务已经创建的日期和时间。
         */
        private LocalDateTime timeOfRecord;
        /**
         * 提交请求的Web服务API版本。
         */
        private String version;
        /**
         * 用户信息
         */
        private Customer customer;

    }

    @Data
    public static class Order {
        /**
         * 付款金额
         */
        private BigDecimal amount;
        /**
         * 创建时间
         */
        private LocalDateTime creationTime;
        /**
         * 币种
         */
        private String currency;
        /**
         * 商品描述
         */
        private String description;
        /**
         * 订单id
         */
        private String id;
        /**
         * AUTHENTICATED T付款人已成功通过身份验证。
         * AUTHENTICATION_INITIATED 付款人身份验证已启动但尚未完成。
         * AUTHENTICATION_NOT_NEEDED 未执行付款人身份验证，因为它不需要。
         * AUTHENTICATION_UNSUCCESSFUL 付款人身份验证无法成功完成。
         * AUTHORIZED 付款已被成功授权，但授权金额尚未（部分，全部或超额）被扣款。
         * CANCELLED 此订单的初始交易已成功作废。
         * CAPTURED 已成功捕获此订单的授权金额（全额或超额）。
         * CHARGEBACK_PROCESSED 已针对此订单处理了拒付。
         * DISPUTED 付款存在争议，正在调查中。信息请求已收到或拒付正在处理中。
         * EXCESSIVELY_REFUNDED 已部分，全部或超额收取了付款，但已成功将所收取的超额金额退还。
         * FAILED 付款未成功。
         * FUNDING 该订单在没有付款人参与的情况下向或从商人转移资金。例如，记录来自支付服务提供商的每月商人服务费用。
         * INITIATED 已成功为此订单启动浏览器付款。尚未付款。
         * PARTIALLY_CAPTURED 此订单的部分授权金额已成功捕获。
         * PARTIALLY_REFUNDED 已捕获部分、全部或超额付款，但已成功退还捕获的部分金额。
         * REFUNDED 已捕获部分、全额或超额付款，但已成功退还捕获的全额金额。
         * REFUND_REQUESTED 本订单已要求退款，但未执行。需要进一步行动来批准退款。
         * VERIFIED 此订单的卡详细信息已成功验证。尚未开始或支付任何款项。
         */
        private String status;
        /**
         * 此订单已成功授权的金额
         */
        private BigDecimal totalAuthorizedAmount;
        /**
         * 此订单已成功捕获的金额
         */
        private BigDecimal totalCapturedAmount;
        /**
         * 此订单已成功退款的金额
         */
        private Integer totalRefundedAmount;
    }


    @Data
    public static class SourceOfFunds {
        private Provided provided;
        private String type;
    }

    @Data
    public static class Provided {
        private Card card;
    }

    @Data
    public static class Card {
        /**
         * brand
         */
        private String brand;
        /**
         * 支付方法
         */
        private String fundingMethod;
        /**
         * 发行人
         */
        private String issuer;
        /**
         * 持卡人姓名
         */
        private String nameOnCard;
        /**
         * 卡号
         */
        private String number;
        /**
         * scheme
         */
        private String scheme;
    }
}
